/*
 * @features: 功能
 * @description: 说明
 * @Date: 2020-10-21 23:17:41
 * @Author: judu233(769471424@qq.com)
 * @LastEditTime: 2020-11-22 23:31:28
 * @LastEditors: judu233
 */


/** 存储在按钮节点的数据 */
export interface I_MapEventData {
    /**触发类型 */
    type: number;
    /**自定义名字 */
    name: string;

    /**是否锁住，锁住状态不消耗触发次数 */
    isLock: boolean;
    /**锁住事件， 用于提示或其他 */
    lockEvent(event: cc.Event, data: I_MapButtonData): any;
    /**锁住事件，序列化的字段 */
    lockEventString?: string;

    /**是否可以重复移动 */
    isRepeatMove: boolean;
    /**移动次数--可以移动到这个按钮的次数 */
    canMoveCounts: number;
    /**当前移动的次数 */
    nowMoveCounts: number;

    /**是否可以重复触发事件， 默认不能重复触发*/
    isRepeatTrigger: boolean;
    /**可以触发的次数, 如果不能重复触发，默认为1次 */
    canTriggerCounts: number;
    /**已经触发的次数 */
    nowTriggerCounts: number;
    /**触发事件 */
    triggerEvent(event: cc.Event, infoData: I_MapButtonData, clientData: any): any;
    /** 触发事件,锁住事件，序列化的字段*/
    triggerString?: string;
    /**数据--不要写入方法 */
    triggerData: any;
}

/**mapDraw脚本继承接口 */
export interface I_MapDrawEvent {
    /**按钮点击事件 */
    btnClickEvent(event: cc.Event): void;
}

/**存储坐标组 */
export interface I_MapPosGroup {
    /**开始位置-- 按钮本身对应的地图数据 */
    startPos: I_Pos;
    /**到达位置 */
    endPos: I_Pos;
}

/**关系数据 */
export interface I_MapRelationship extends I_MapPosGroup {
    /**是否在地图上绘制出来 */
    isDraw: boolean;
}

/**地图按钮的数据格式 */
export interface I_MapButtonData extends I_Pos {
    /**按钮 */
    btn: cc.Button;
    /**数据 */
    data: I_MapEventData;
    /**关系数组--最后一个参数是是否绘制 */
    relationship: I_MapRelationship[];
    /**数据的序列化字段 */
    dataString?: string;
    /**关系数组的序列字段 */
    relationshipString?: string;
}
/**存储地图xy基础数据 */
export interface I_Pos { x: number; y: number; };

/**地图原始数据 */
export type I_MapDataArr = number[][];

/**地图初始数据 */
export interface I_MapInitData {
    /**地图名字 */
    name: string;
    /**地图id */
    id: number;
    /**原始数据列表 */
    dataArr: I_MapDataArr;
    /**开始位置 */
    startPos: I_Pos;
    /**结束位置 */
    endPos: I_Pos;
    /**中间位置--用于地图结束视图 */
    centerPos: I_Pos;

    /**地图方格长 y*/
    height: number;
    /**地图方格宽x */
    width: number;

    /**定义存储位置的链接符: 例如 1-2 */
    symbol?: string;
    /**是否启用正方向判断--即点击四个正方向会绘制--和判断-----默认 开启*/
    isPositiveDirection?: boolean;
    /**是否启斜方形判断--同上-----默认 开启*/
    isObliqueDirection?: boolean;
}

export interface I_MapSave {
    startBntString: string;
    nowBtnString: string;
    lastBtnString: string;
    dataListString: string;
    relationshipString: string;
    btnDrawesString: string;
    deliveryString: string;
    btnClickString: string;
    lineDrawedString: string;
}

/**地图数据 */
export interface I_MapData extends I_MapInitData {
    /**开始按钮*/
    startBtn: I_MapButtonData;
    /**当前按钮 */
    nowClickBtn: I_MapButtonData;
    /**上一个点击的按钮 */
    lastClickBtn: I_MapButtonData;

    /**存储地图的事件类型arr---点击类型 */
    dataList: I_MapEventData[][];
    /**存储地图关系arr--是否可以从一点走到另一点 */
    relationshipList: Map<string, I_MapRelationship[]>;

    /**存储绘制的按钮信息，方便序列化 */
    btnDrawedMap: Map<string, I_MapButtonData>;
    /**存储传送点信息 */
    deliveryMap: Map<string, I_MapPosGroup>;
    /**已经绘制了的线条列表--用于判断*/
    lineDrawedMap: Map<string, I_LinePoint>;

    /**点击的列表--回退会清除--记录行走关系*/
    btnClickList: I_MapButtonData[];
    /**已经访问过的列表---只要点击就会记录--方便序列化存储下次读取绘制 */
    // btnVisitedList: I_MapButtonData[];
}


/**地图绘制信息 */
export interface I_DrawInfo {
    btnInfoList: I_MapButtonData[];
    lineList: I_LinePoint[];
}

/**画线信息 */
export interface I_LinePoint {
    /**绘制id */
    id: string;
    /**开始坐标 */
    startPos: cc.Vec3;
    /**结束坐标 */
    endPos: cc.Vec3;
    /**绘制间隔时间， 越小绘越流畅，越大每次绘制会停顿*/
    drawInterval: number;
    /**画线步长, 越大，在 drawTime 一定数值下，绘制距离越长 */
    step: number;
}